package auth

import (
	_ "app/api/schema"
	rich_err "app/error"
	_ "app/models"
	"app/service/auth"
	"app/utils"
	"github.com/GoAdminGroup/go-admin/engine"
	"github.com/gin-gonic/gin"
	"strconv"
)

func Init(group *gin.RouterGroup) {
	UserInfo(group)
	UserList(group)
	UserDetail(group)
	RoleList(group)
	RoleDetail(group)
	PermissionList(group)
	PermissionDetail(group)
}

// @Summary 登录
// @Tags auth
// @Accept multipart/form-data
// @Produce json
// @Param req body object true "username: 用户名, password:密码"
// @Success 200   "响应内容不重要,登录成功后,拿到 go_admin_session 这个cookie, 作为登录凭证"
// @Failure 400,500
// @Router /admin/signin [post]
func Login(context *gin.Context) {
}

// @Summary 登出
// @Tags auth
// @Produce json
// @Success 200  "响应内容不重要"
// @Failure 400,500
// @Router /admin/logout [get]
func Logout(context *gin.Context) {
}

// @Summary 获取登录用户当前信息
// @Tags auth
// @Produce json
// @Success 200 {object} schema.Response{data=models.GoadminUsers}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/info [get]
func UserInfo(group *gin.RouterGroup) {
	group.GET("/info", func(context *gin.Context) {
		// 获取管理员,以及其对应角色
		user, _ := engine.User(context)
		data, richErr := auth.GetUser(int(user.Id))
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 获取指定用户当前信息
// @Tags auth
// @Produce json
// @Success 200 {object} schema.Response{data=models.GoadminUsers}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/{id} [get]
func UserDetail(group *gin.RouterGroup) {
	group.GET("/:id", func(context *gin.Context) {
		id, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		data, richErr := auth.GetUser(id)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 获取用户当前信息列表
// @Tags auth
// @Description.markdown desc_common_page
// @param page_size query integer false "用于分页的每页最大元素数量" minimum(1)
// @param page_index query integer false "请求的页码" minimum(1)
// @Produce json
// @param slug query string false "筛选指定角色的user"
// @param name query string false "模糊筛选用户名"
// @param order query string false "需要排序的字段,如需倒序,字段名前面加 `-`"
// @Success 200 {object} schema.Response{data=[]models.GoadminUsers}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users [get]
func UserList(group *gin.RouterGroup) {
	group.GET("/", func(context *gin.Context) {
		data, pager, richErr := auth.GetUsers(context)
		utils.GinJSONPageWithRichErr(context, data, pager, richErr)
	})
}

// @Summary 获取指定角色信息
// @Tags auth
// @Produce json
// @Success 200 {object} schema.Response{data=models.GoadminRoles}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/roles/{id} [get]
func RoleDetail(group *gin.RouterGroup) {
	group.GET("/roles/:id", func(context *gin.Context) {
		id, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		data, richErr := auth.GetRole(id)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 获取指定角色信息列表
// @Tags auth
// @Description.markdown desc_common_page
// @param page_size query integer false "用于分页的每页最大元素数量" minimum(1)
// @param page_index query integer false "请求的页码" minimum(1)
// @Produce json
// @param order query string false "需要排序的字段,如需倒序,字段名前面加 `-`"
// @Success 200 {object} schema.Response{data=[]models.GoadminRoles}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/roles/ [get]
func RoleList(group *gin.RouterGroup) {
	group.GET("/roles", func(context *gin.Context) {
		data, pager, richErr := auth.GetRoles(context)
		utils.GinJSONPageWithRichErr(context, data, pager, richErr)
	})
}

// @Summary 获取指定权限信息
// @Tags auth
// @Produce json
// @Success 200 {object} schema.Response{data=models.GoadminPermissions}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/permissions/{id} [get]
func PermissionDetail(group *gin.RouterGroup) {
	group.GET("/permissions/:id", func(context *gin.Context) {
		_, err := strconv.Atoi(context.Param("id"))
		if err != nil {
			utils.GinJSONWithRichErr(context, nil, rich_err.NewError(rich_err.RequestInvalid, err))
			return
		}
		data, richErr := auth.GetPermission(context)
		utils.GinJSONWithRichErr(context, data, richErr)
	})
}

// @Summary 获取指定权限信息列表
// @Description.markdown desc_common_page
// @param page_size query integer false "用于分页的每页最大元素数量" minimum(1)
// @param page_index query integer false "请求的页码" minimum(1)
// @Tags auth
// @Produce json
// @Success 200 {object} schema.Response{data=[]models.GoadminPermissions}
// @Failure 404,500 {object} schema.ResponseErr
// @Router /api/v1/users/permissions/ [get]
func PermissionList(group *gin.RouterGroup) {
	group.GET("/permissions", func(context *gin.Context) {
		data, pager, richErr := auth.GetPermissions(context)
		utils.GinJSONPageWithRichErr(context, data, pager, richErr)
	})
}
